function gewWaterMaterial(effect,name)
{ 
  // general properties
  gewMaterial.call(this,effect,name);
  this.normalMap = null;
  this.reflectionMap = null;
  this.waterColor = [0.3,0.3,0.5,0.2];
  this.waveSize = 24;  
  this.strength = 6.; // again wind
  //Private:
}
//gewWaterMaterial.prototype = new gewMaterial();
extend2(gewWaterMaterial,gewMaterial);
gewWaterMaterial.prototype.render = function()
{
  this.isRendering = true;
  // Render node list
  var effect = this.effect;
  var scene3d = effect.scene3d;
  var gl = this.gl;
  var normalMap = this.normalMap;
  var reflectionMap = this.reflectionMap;
  var game = effect.game;
  if(normalMap&&normalMap.isReady&&
     reflectionMap&&reflectionMap.isReady)
  {    
    gl.uniform1i(effect.normapMap, 0);
    gl.uniform1i(effect.reflectionMap, 1);
    gl.activeTexture(gl.TEXTURE0);
    gl.bindTexture(gl.TEXTURE_2D, normalMap.glName);
    gl.activeTexture(gl.TEXTURE1);
    gl.bindTexture(gl.TEXTURE_2D, reflectionMap.glName);
    var wind = scene3d.wind;
    var ellapseTime = game.time/1000; 
    var dx = wind.x*ellapseTime/this.strength;
    var dz = wind.z*ellapseTime/this.strength;
    gl.uniform4f(effect.waterParam0, dx,dz,this.waveSize,0);
    var list  = this.nodeList;
    var listLen = list.length;
    var waterColor = this.waterColor;
    gl.uniform4f(effect.waterColor, waterColor[0], waterColor[1], waterColor[2],waterColor[3] );
    //if (this.batchType == NO_BATCH) 
    {
      for (var i = 0; i < listLen; i++) 
      {
        var node = list[i];
        if(!node.getFlag(NODE_FRUSTUM_IN)||!node.isVisible)
          continue;
        gl.uniformMatrix4fv(effect.modelMat, false, node.modelMat.data);
        node.render(this);
      }
    } 
  }
  this.isRendering = false;
}
